"""
python中的私有和java中的私有意义是一样的，就是无法被外界直接访问
    无法被继承
如何获取和使用私有方法
    在java当中其实是通过getter setter方法把私有属性包装起来，供外界调用
                通过公共方法 ，把私有方法包裹起来供外界使用的
    当然在python中也是如此
"""
class Master(object):
    def __init__(self):
        self.kongfu = ['古法做汤圆']
        self.key = '老板的钥匙'

    def make_cake(self):
        print(f"使用【{self.kongfu}】制作汤圆")

    # 父类的私有方法
    def __store(self):
        print("Master有一个私有商店")

    def store2(self):
        print("Master有一个商店")



class School():
    def __init__(self):
        self.kongfu = ['科技做汤圆']

    def make_cake(self):
        print(f"使用【{self.kongfu}】制作汤圆")

class Prentice(Master,School):
    def __init__(self):
        self.kongfu = ['秘方做汤圆']
        # 定义一个私有变量，私有变量不能通过 . 调用
        self.__money = 20000

    #私有方法不能通过 对象. 方法名使用
    def __info_print(self):
        print(f"做法:{self.kongfu}，个人财产：{self.__money}")

    def make_cake(self):
        print(f"使用【{self.kongfu}】制作汤圆")

    def make_master_cake(self):
        Master.__init__(self)
        Master.make_cake(self)

    def make_school_cake(self):
        School.__init__(self)
        School.make_cake(self)

    ## getter setter方法用于外界获取和修改私有变量
    def get_money(self):
        return self.__money
    def set_money(self,money):
        self.__money = money

    #将私有方法包装起来让外界使用
    def print_info(self):
        self.__info_print()

prentice = Prentice()
# 无法直接使用私有方法
#prentice.__info_print()
# 通过公有方法调用内部私有方法
prentice.print_info()

# 无法直接获取私有属性
#print(prentice.__money)
# 通过getter方法得到私有属性
print(prentice.get_money())
# 通过setter方法设置私有属性
prentice.set_money(100)
print(prentice.get_money())